import Vue from 'vue'
import App from './App.vue'
import router from './router'
// 打印
import { getLodop } from '@/assets/LodopFuncs' // 确保路径正确
// 将getLodop挂载到Vue原型上
// Vue.prototype.$getLodop = getLodop
// src/main.js
import '@/assets/variables.less'
// 挂载 Base64 到 Vue 的原型链上
//Vue.prototype.$base64 = Base64.Base64;
import websocket from '@/untils/webSocket';
// zdy
import Directives from './external/comment/directives'
// zdy zl
import directivesAll from './directive/index.js'
// 引入
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import './external/iconfonts/iconfont.css';
// main.js
import {getRouteButtons, mergeButtons} from '@/untils/auth';
import JsonViewer from 'vue-json-viewer'

// 动态设置 Element UI 主题色
function setElementTheme(theme) {
    const themes = {
        default: '#00557f',
        red: '#cc0033',
        blue: '#00a0e9',
        green: '#1AAD19'
    }
    document.documentElement.style.setProperty('--el-color-primary', themes[theme]);
}
// 每5分钟检查一次
// setInterval(() => {
//   if (checkLoginExpiry()) {
//     clearAuth()
//     router.push('/login')
//     Vue.prototype.$message.error('登录已超时，请重新登录')
//   }
// }, 5 * 60 * 1000)
// 从本地存储获取主题
const savedTheme = localStorage.getItem('theme') || 'default';
setElementTheme(savedTheme);

Vue.prototype.$websocket = websocket;

Vue.use(Directives)

Vue.use(directivesAll)
// 全局封装 JSON.parse 方法
Vue.prototype.$parseJSON = function (jsonString) {
    try {
        return JSON.parse(jsonString);
    } catch (error) {
        console.error('JSON解析失败:', error);
        return null; // 或者返回默认值
    }
};
// 生产提示
Vue.config.productionTip = false

Vue.use(ElementUI);

Vue.use(JsonViewer)

ElementUI.Dialog.props.modal.default = false
Vue.mixin({
    mounted() {
        if (this.$options.name === 'ElDialog') {
            this.$escHandler = (event) => {
                if (event.keyCode === 27 && this.visible && this.closeOnPressEscape !== false) {
                    this.handleClose ? this.handleClose() : this.close();
                }
            };
            document.addEventListener('keydown', this.$escHandler);
        }
    },

    beforeDestroy() {
        if (this.$escHandler) {
            document.removeEventListener('keydown', this.$escHandler);
        }
    }
});

// 挂载到Vue原型上
Vue.prototype.$getRouteButtons = getRouteButtons;
Vue.prototype.$mergeButtons = mergeButtons; // 确保挂载到Vue原型
// 或者直接挂载单个方法
// Vue.prototype.$formatDate = commonMethods.formatDate
// Vue.prototype.$deepClone = commonMethods.deepClone


//关闭所有下拉框
Vue.prototype.$closeAllSelects = function () {
    // 隐藏所有 select 下拉框
    const selectDropdowns = document.querySelectorAll('.el-select-dropdown');
    selectDropdowns.forEach(dropdown => {
        dropdown.style.display = 'none';
    });

    // 移除 select 输入框的焦点状态
    const selectInputs = document.querySelectorAll('.el-select .el-input__inner');
    selectInputs.forEach(input => {
        input.blur();
    });
};

//把bus挂载在Vue的原型上
Vue.prototype.$bus = new Vue();
// 定义全局高度获取方法
Vue.prototype.$getHeights = function () {
    // 获取浏览器可视高度
    const windowHeight = window.innerHeight || document.documentElement.clientHeight

    // 获取 MAIN 容器高度（需确保元素存在）
    const mainElement = document.getElementById('header')
    const rightContentElement = document.getElementById('rightCont')
    const feetElement = document.getElementById('feet')
    const lastElement = document.getElementById('last')

    // const mainHeight = mainElement ? mainElement.offsetHeight : 0
    const rightContentHeight = rightContentElement ? rightContentElement.offsetHeight : 0
    const feetHeight = feetElement ? feetElement.offsetHeight : 0
    const lastHeight = lastElement ? lastElement.offsetHeight : 40

    return {
        windowHeight, // 浏览器可视高度
        // mainHeight,    // MAIN 容器实际高度
        rightContentHeight,
        lastHeight,    // last 容器实际高度
        feetHeight    // feet 容器实际高度
    }
}

// 注册全局混入（自动在组件 mounted 时触发）
// Vue.mixin({
//   mounted() {
//     // 组件挂载后自动获取高度
//     const heights = this.$getHeights()
//     console.log('当前高度:', heights)

//     // 可选：将高度存入 Vuex 或组件 data
//     // this.$store.commit('SET_HEIGHTS', heights)
//     // 或 this.heights = heights
//   }
// })
new Vue({
    router,
    render: h => h(App)
}).$mount('#app')
